今天我們將講解Array higher order function之一的Sort function。
當我們想要排序Array內元素時,該如何做呢?
// 從小到大排序
const arr = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5];
const length = arr.length;
for (let i = 0; i < length - 1; i++) {
for (let j = 0; j < length - 1 - i; j++) {
// 如果當前元素大於下一個元素,互換元素
if (arr[j] > arr[j + 1]) {
const temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
console.log(arr); // [1, 1, 2, 3, 3, 4, 5, 5, 5, 6, 9]
上述程式碼是使用Bubble Sorting進行排序
然而JavaScript Array本身就有內建排序函式可用,可以簡單快速地完成排序目的
const arr = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5];
console.log(arr.sort()) // [1, 1, 2, 3, 3, 4, 5, 5, 5, 6, 9]
Sort function會改變使用此函示的Array
sort() //語法1,邏輯預設是小排到大
sort(compareFn)//語法2
compareFn意思為定義排序順序的函式,此函式有兩個參數a和b,排序邏輯會根據compareFn的return值決定
return數值 | 排序邏輯 |
---|---|
大於0 | a在b後(順序改變) |
等於0 | 順序不變 |
小於0 | a在b前(順序改變) |
a - b | 升序排序(小到大) |
b - a | 降序排序(大到小) |
let name = ["Tim", "Jeremy", "Kevin"];
name.sort((a, b) => {
if (a.length > b.length) {
return 1; // b排在a前
} else if (a.length < b.length) {
return -1; // a排在b前
} else {
return 0; // a 和 b 長度相等時,順序不變
}
});
console.log(name); // ["Tim", "Kevin", "Jeremy"]
簡潔版本:
let name = ["Tim", "Jeremy", "Kevin"];
name.sort((a, b) => a.length - b.length);
console.log(name); // ["Tim", "Kevin", "Jeremy"]